
-- 函数

-- 定义
--[[
    function_scope function function_name( arg1, arg2, ..., argn)
        function_body
        return result1,result2,...,resultn
    end
--]]
-- function_scope : 表示函数的作用域 ，默认是全局函数，加上local 局部函数
-- 参数 ：可以是可变的，使用三点 ... 表示函数有可变的参数
-- 返回值 ：可以是多个

function maximum (a)
    local mi = 1             -- 最大值索引
    local m = a[mi]          -- 最大值
    for i,val in ipairs(a) do
        if val > m then
            mi = i
            m = val
        end
    end
    return m, mi
end

-- 关于可变参数
-- 可变参数 ： 本质上就是一个数组，可以使用 for 循环遍历 ，也可以使用使用一个变量接收
-- 可以通过 select("#",...) 来获取可变参数的数量
-- 在遍历变长参数的时候只需要使用 {...}
-- 变长参数可能会包含一些 nil，那么就可以用 select 函数来访问变长参数了：select('#', …) 或者 select(n, …)
-- select('#', ...) : 返回可变参数的长度
-- select(n, ...) 用于返回从起点 n 开始到结束位置的所有参数列表

function add(...)
    local s = 0
    for i, v in ipairs{...} do   --> {...} 表示一个由所有变长参数构成的数组
        s = s + v
    end
    return s
end
print(add(3,4,5,6,7))  --->25

function average(...)
    result = 0
    local arg={...}    --> arg 为一个表，局部变量
    for i,v in ipairs(arg) do
        result = result + v
    end
    print("总共传入 " .. #arg .. " 个数")
    return result/#arg
end

print("平均值为",average(10,5,3,4,5,6))

function average(...)
    result = 0
    local arg={...}
    for i,v in ipairs(arg) do
        result = result + v
    end
    print("总共传入 " .. select("#",...) .. " 个数")
    return result/select("#",...)
end

print("平均值为",average(10,5,3,4,5,6))
